/***********************************************************************************
 * 文 件 名   : FrameDataParser.h
 * 负 责 人   : jiangfeng.zhang
 * 创建日期   : 2021年7月8日
 * 文件描述   : 数据帧解析头文件
 * 版权说明   : Copyright (c) 2008-2021   Personal. All rights reserved.
 * 其    他   : 
 * 修改日志   : 
***********************************************************************************/

#ifndef _FRAME_DATA_PARSER_H
#define _FRAME_DATA_PARSER_H


//#define MAX_FRAME_BYTES     2048
#define FRAME_PARSER_SUCCESS      1
#define FRAME_PARSER_ERROR        0
#define FRAME_NULL       0

#define  FRAME_DATA_FIRST_HEAD   0XEB
#define  FRAME_DATA_SUB_HEAD     0XEB
#define  FRAME_DATA_FIRST_TAIL   0XED
#define  FRAME_DATA_SUB_TAIL     0X03

enum ENUM_CMD_ID
{
   CmdOpenDoor =  0x30,      //自定义命令字，开窗ID
   CmdCloseDoor = 0x31,      //自定义命令字，关窗ID
};

enum ENUM_RECV_FLAG
{
   RecvNothing = 0,       //未检测到包头
   RecvFirstHeader = 1, //检测到第一个包头字节(仅针对有两个字节包头的协议帧)
   RecvHeader = 2,      //检测到包头
   RecvSubTail = 3,     //检测到次包尾(仅针对包尾有两字节(0xed 0x03),表示检测到0xed)
   RecvComplete = 4,    //检测到包尾
};


enum ENUM_ESCAPE_FLAG
{
   EscapeDisEnable = 0,     //非转义
   EscapeEnable = 1,       //转义
};


#if 0
typedef struct __ST_Frame
{
    int recvFlag;//0-NULL;1-Header Detected;2-Frame Complete;
    int len;
    int escape;
    int bufSize;
    unsigned char *buffer;
}ST_FRAME;
#endif

#define MAX_BUFFER_LEN 50
typedef struct __ST_Frame
{
    int recvFlag;//0-NULL;1-Header Detected;2-Frame Complete;
    int len;
    int escape;
    int bufSize;
    unsigned char buffer[MAX_BUFFER_LEN];
}ST_FRAME;


//ST_FRAME *CreateFrameBufferFun0(int bufSize);
int CreateFrameBufferFun1(ST_FRAME *pFrame, int bufSize);
int  FrameDataPack(unsigned char *inputBuf, int iutputBufLen, unsigned char *outputBuf);
int  FrameDataUnpack(ST_FRAME* frame, unsigned char data);
int  FrameDataUnpackDoubleWithoutEsc(ST_FRAME *frame, unsigned char data);

int  CopyFrameData(ST_FRAME *frame, unsigned char *outbuf);
void ResetFrame(ST_FRAME* frame);
//void CloseFrameFun0(ST_FRAME *frame);
void CloseFrameFun1(ST_FRAME *frame);




extern ST_FRAME   g_stFrame;

#endif
